package hot100;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * 给你一个字符串数组，请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
 *
 *
 *
 * 示例 1:
 *
 * 输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
 *
 * 输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
 *
 * 解释：
 *
 * 在 strs 中没有字符串可以通过重新排列来形成 "bat"。
 * 字符串 "nat" 和 "tan" 是字母异位词，因为它们可以重新排列以形成彼此。
 * 字符串 "ate" ，"eat" 和 "tea" 是字母异位词，因为它们可以重新排列以形成彼此。
 * 示例 2:
 *
 * 输入: strs = [""]
 *
 * 输出: [[""]]
 *
 * 示例 3:
 *
 * 输入: strs = ["a"]
 *
 * 输出: [["a"]]
 */
public class groupAnagrams_ {
    // 将strs数组中的字符串进行排序 如 eat -> aet 将排序之后的字符串作为Map的key 创建新的List<String>作为value
    // 之后遍历字符串数组, 将每个元素进行排序之后进行操作
    public List<List<String>> groupAnagrams(String[] strs) {
        HashMap<String, List<String>>map = new HashMap<String, List<String>>();
        for (String str : strs) {
            char[] arr = str.toCharArray();
            java.util.Arrays.sort(arr);
            map.put(String.valueOf(arr), new ArrayList<String>());
        }
        for (String str : strs) {
            char[] arr = str.toCharArray();
            java.util.Arrays.sort(arr);
            map.get(String.valueOf(arr)).add(str);
            map.put(String.valueOf(arr), map.get(String.valueOf(arr)));
        }
        return new ArrayList<>(map.values());
    }
}
